//package com.example.pets.model.datasource.DataSourceImpl;
//
//
//import androidx.annotation.NonNull;
//import androidx.lifecycle.LiveData;
//import androidx.lifecycle.MutableLiveData;
//
//import com.example.pets.model.datasource.PostDataSource;
//import com.example.pets.model.entities.Post;
//
//
//import java.util.ArrayList;
//import java.util.List;
//
//public class PostDataSourceImpl implements PostDataSource {
//
//    private final CollectionReference postsCollection;
//
//    public PostDataSourceImpl() {
//        FirebaseFirestore db = FirebaseFirestore.getInstance();
//        postsCollection = db.collection("posts");
//    }
//
//    @Override
//    public LiveData<Post> getPostById(String poid) {
//        MutableLiveData<Post> postLiveData = new MutableLiveData<>();
//        postsCollection.document(poid)
//                .addSnapshotListener((documentSnapshot, e) -> {
//                    if (e != null || documentSnapshot == null || !documentSnapshot.exists()) {
//                        postLiveData.setValue(null);
//                        return;
//                    }
//                    Post post = documentSnapshot.toObject(Post.class);
//                    postLiveData.setValue(post);
//                });
//        return postLiveData;
//    }
//
//    @Override
//    public LiveData<Boolean> addPost(Post post) {
//        MutableLiveData<Boolean> resultLiveData = new MutableLiveData<>();
//        postsCollection.add(post)
//                .addOnSuccessListener(documentReference -> resultLiveData.setValue(true))
//                .addOnFailureListener(e -> resultLiveData.setValue(false));
//        return resultLiveData;
//    }
//
//    @Override
//    public LiveData<Boolean> updatePost(String poid, Post post) {
//        MutableLiveData<Boolean> resultLiveData = new MutableLiveData<>();
//        postsCollection.document(poid)
//                .set(post)
//                .addOnSuccessListener(aVoid -> resultLiveData.setValue(true))
//                .addOnFailureListener(e -> resultLiveData.setValue(false));
//        return resultLiveData;
//    }
//
//    @Override
//    public LiveData<Boolean> deletePost(String poid) {
//        MutableLiveData<Boolean> resultLiveData = new MutableLiveData<>();
//        postsCollection.document(poid)
//                .delete()
//                .addOnSuccessListener(aVoid -> resultLiveData.setValue(true))
//                .addOnFailureListener(e -> resultLiveData.setValue(false));
//        return resultLiveData;
//    }
//
//    @Override
//    public LiveData<List<Post>> getPostsByAuthorOrdered(DocumentReference authorRef, boolean ascending) {
//        MutableLiveData<List<Post>> postsLiveData = new MutableLiveData<>();
//        Query.Direction direction = ascending ? Query.Direction.ASCENDING : Query.Direction.DESCENDING;
//
//        postsCollection
//                .whereEqualTo("author", authorRef)
//                .orderBy("createTime", direction)
//                .addSnapshotListener((querySnapshot, e) -> {
//                    if (e != null || querySnapshot == null) {
//                        postsLiveData.setValue(null);
//                        return;
//                    }
//
//                    List<Post> posts = new ArrayList<>();
//                    for (QueryDocumentSnapshot doc : querySnapshot) {
//                        Post post = doc.toObject(Post.class);
//                        posts.add(post);
//                    }
//                    postsLiveData.setValue(posts);
//                });
//
//        return postsLiveData;
//    }
//
//    @Override
//    public LiveData<List<Post>> getAllPostsOrdered(boolean ascending) {
//        MutableLiveData<List<Post>> postsLiveData = new MutableLiveData<>();
//        Query.Direction direction = ascending ? Query.Direction.ASCENDING : Query.Direction.DESCENDING;
//
//        postsCollection
//                .orderBy("createTime", direction)
//                .addSnapshotListener((querySnapshot, e) -> {
//                    if (e != null || querySnapshot == null) {
//                        postsLiveData.setValue(null);
//                        return;
//                    }
//
//                    List<Post> posts = new ArrayList<>();
//                    for (QueryDocumentSnapshot doc : querySnapshot) {
//                        Post post = doc.toObject(Post.class);
//                        posts.add(post);
//                    }
//                    postsLiveData.setValue(posts);
//                });
//
//        return postsLiveData;
//    }
//
//}
